using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Gratamira.CapaNegocio;
using Infragistics.Win.UltraWinEditors;
using Infragistics.Win.UltraWinMaskedEdit;


namespace Gratamira.Presentacion
{
    public partial class frmMaeProducto : frmBaseMaestra, IBaseMaestra
    {

        private Producto mProducto;
        private BindingSource fuenteEnlace = new BindingSource();

        #region Constructores
        //public frmMaeProducto(estadoPantalla pModoPantalla)
        //{
        //    InitializeComponent();
        //    llenarListas();
        //    base.Estado = pModoPantalla;
        //}

        public frmMaeProducto(string pProductoID, estadoPantalla pModoPantalla)
        {
            InitializeComponent();
            llenarListas();
            if (pModoPantalla != estadoPantalla.Insertar)
            {
                mProducto = new Producto(pProductoID);
            }
            else
            {
                mProducto = new Producto();
            }
            base.Estado = pModoPantalla;
            this.Text = Usuario.Empresa + " - Maestra de Producto";
        }
        #endregion


        private void llenarListas()
        {
            Unidad u = new Unidad();
            ddlUnidadCompra.DataSource = u.leerTodasUnidades(); ;
            ddlUnidadCompra.DisplayMember = "UnidadID";
            ddlUnidadCompra.ValueMember = "UnidadID";
            ddlUnidadCompra.SelectedIndex = 0;
            ddlUnidadManejo.DataSource = ddlUnidadCompra.DataSource;
            ddlUnidadManejo.DisplayMember = "UnidadID";
            ddlUnidadManejo.ValueMember = "UnidadID";
            ddlUnidadManejo.SelectedIndex = 0;
            ddlEstado.Items.Add("Activo");
            ddlEstado.Items.Add("Inactivo");
            ddlEstado.SelectedIndex = 0;
            //Llenar lista de Formatos
            Formato f = new Formato();
            ddlFormato.DataSource = f.leerFormato("%");
            ddlFormato.DisplayMember = "FormatoID";
            ddlFormato.ValueMember = "FormatoID";
            ddlFormato.SelectedIndex = 0;
        }

        public override void deshabilitarControles()
        {
            //No permite modificar el contenido de los controles
            txtGrupoID.Enabled = false;
            cmdGrupo.Enabled = false;
            lblDescripcionGrupo.Enabled = false;
            txtCodigo.Enabled = false;
            txtNombre.Enabled = false;
            ddlFormato.Enabled = false;
            ddlEstado.Enabled = false;
            txtCosto.Enabled = false;
            txtPrecio1.Enabled = false;
            txtPrecio2.Enabled = false;
            ddlUnidadCompra.Enabled = false;
            ddlUnidadManejo.Enabled = false;
            if (mProducto.ComportamientoGrupal == "S")
            {
                ddlFormato.Visible = true;
            }
            else
            {
                ddlFormato.Visible = false;
            }
        }

        public override void habilitarControles()
        {
            //Permite modificar el contenido de los controles
            if (base.Estado == estadoPantalla.Insertar)
            {
                txtCodigo.Enabled = true;
                txtGrupoID.Enabled = true;
                cmdGrupo.Enabled = true;
            }

            if (mProducto.ComportamientoGrupal == "N")
            {
                txtCosto.Enabled = true;
                txtPrecio1.Enabled = true;
                txtPrecio2.Enabled = true;
                ddlUnidadCompra.Enabled = true;
                ddlUnidadManejo.Enabled = true;
                txtNombre.Enabled = true;
                ddlFormato.Visible = false;
            }
            else
            {
                ddlFormato.Visible = true;
                ddlFormato.Enabled = true;
                txtNombre.Enabled = false;
            }
            ddlEstado.Enabled = true;
        }

        public override void unirDatosClaseForma()
        {
            fuenteEnlace.DataSource = mProducto;
            txtGrupoID.DataBindings.Add("Text", fuenteEnlace, "GrupoID");
            lblDescripcionGrupo.DataBindings.Add("Text", fuenteEnlace, "DescripcionGrupo");
            txtCodigo.DataBindings.Add("Text", fuenteEnlace, "ProductoID");
            txtNombre.DataBindings.Add("Text", fuenteEnlace, "Nombre");
            ddlEstado.DataBindings.Add("Text", fuenteEnlace, "Estado");
            txtCosto.DataBindings.Add("Value", fuenteEnlace, "Costo");
            txtPrecio1.DataBindings.Add("Value", fuenteEnlace, "Precio1");
            txtPrecio2.DataBindings.Add("Value", fuenteEnlace, "Precio2");
            ddlUnidadCompra.DataBindings.Add("Text", fuenteEnlace, "UnidadCompra");
            ddlUnidadManejo.DataBindings.Add("Text", fuenteEnlace, "UnidadManejo");
            ddlFormato.DataBindings.Add("Text", fuenteEnlace, "FormatoID");

            if (base.Estado == estadoPantalla.Insertar)
            {
                limpiarControles();
            }
        }

        public override bool salvarCambios()
        {
            mProducto.UsuarioCreacion = Usuario.NombreUsuario;
            mProducto.UsuarioModificacion = Usuario.NombreUsuario;
            return mProducto.insertarProducto();
        }

        public override void actualizarCambios()
        {
            mProducto.UsuarioModificacion = Usuario.NombreUsuario;
            mProducto.actualizarProducto();
        }

        public override void limpiarControles()
        {
            mProducto.GrupoID = "";
            mProducto.DescripcionGrupo = "";
            mProducto.ProductoID = "";
            mProducto.Nombre = "";
            mProducto.Costo = 0;
            mProducto.Precio1 = 0;
            mProducto.Precio2 = 0;
            //Modificar indice de la lista, para iniciar los valores
            mProducto.Estado = "Activo";
            mProducto.UnidadCompra = ddlUnidadCompra.Items[0].ToString();
            mProducto.UnidadManejo = ddlUnidadManejo.Items[0].ToString();
            mProducto.FormatoID = ddlFormato.Items[0].ToString();
            fuenteEnlace.ResetBindings(false);
        }

        public override void leerDatosAuditoria(out string pUsuaCrea, out string pFechCrea, out string pUsuaModi, out string pFechModi)
        {
            pUsuaCrea = mProducto.UsuarioCreacion;
            pUsuaModi = mProducto.UsuarioModificacion;
            pFechCrea = mProducto.FechaCreacion;
            pFechModi = mProducto.FechaModificacion;
        }

        public override bool hayDatosModificados()
        {
            return mProducto.Modificada;
        }

        public override bool verificarDatos()
        {
            if (utilidadesPresentacion.verificarContenido(lblDescripcionGrupo, epProducto) && utilidadesPresentacion.verificarContenido(txtCodigo, epProducto) &&
                utilidadesPresentacion.verificarContenido(ddlEstado, epProducto) && utilidadesPresentacion.verificarContenido(txtNombre, epProducto) &&
                utilidadesPresentacion.verificarContenido(txtCosto, epProducto) &&
                utilidadesPresentacion.verificarContenido(txtPrecio1, epProducto) && utilidadesPresentacion.verificarContenido(txtPrecio2, epProducto) &&
                utilidadesPresentacion.verificarContenido(ddlUnidadCompra, epProducto) && utilidadesPresentacion.verificarContenido(ddlUnidadManejo, epProducto)
                )
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        private void configurarValoresGrupo(Grupo pGrupo)
        {
            if (pGrupo.Nombre != null)
            {
                mProducto.GrupoID = pGrupo.GrupoID;
                mProducto.DescripcionGrupo = pGrupo.Nombre;
                mProducto.ComportamientoGrupal = pGrupo.IndicadorComportamientoGrupo;
                //Asignar nuevo Codigo de grupo
                mProducto.ProductoID = pGrupo.proximoCodigoProductoSugerido();
                if (pGrupo.IndicadorComportamientoGrupo == "S")
                {
                    //Asignar valores del grupo leido
                    mProducto.Costo = pGrupo.Costo;
                    mProducto.Precio1 = pGrupo.Precio1;
                    mProducto.Precio2 = pGrupo.Precio2;
                    mProducto.UnidadCompra = pGrupo.UnidadCompra;
                    mProducto.UnidadManejo = pGrupo.UnidadManejo;
                    //Deshabilitar campos de grupo
                    txtCosto.Enabled = false;
                    txtPrecio1.Enabled = false;
                    txtPrecio2.Enabled = false;
                    ddlUnidadCompra.Enabled = false;
                    ddlUnidadManejo.Enabled = false;
                    txtNombre.Enabled = false;
                    //Habilitar el formato y hacerlo visible
                    ddlFormato.Visible = true;
                    ddlFormato.Enabled = true;
                }
                else
                {
                    //Habilitar campos de grupo
                    txtCosto.Enabled = true;
                    txtPrecio1.Enabled = true;
                    txtPrecio2.Enabled = true;
                    ddlUnidadCompra.Enabled = true;
                    ddlUnidadManejo.Enabled = true;
                    txtNombre.Enabled = true;
                    txtNombre.Text = "";
                    //Habilitar el formato y hacerlo visible
                    ddlFormato.Visible = false;
                    ddlFormato.Enabled = false;
                }
                fuenteEnlace.ResetBindings(false);
                ddlFormato.SelectedIndex = -1;
                ddlFormato.SelectedIndex = 0;
            }
            else
            {
                //No existe el grupo digitado
                MessageBox.Show("El grupo digitado no Existe. Debe corregir antes de continuar.", "Maestra de Productos", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void cmdGrupo_Click(object sender, EventArgs e)
        {
            string tAdministrador;
            if (Usuario.comprobarAcceso("frmConEmpresa", out tAdministrador))
            {
                frmConGrupo pantalla = new frmConGrupo(tAdministrador);
                pantalla.grupoSeleccionado.GrupoID = txtGrupoID.Text;
                pantalla.grupoSeleccionado.Nombre = lblDescripcionGrupo.Text;
                pantalla.ShowDialog();
                configurarValoresGrupo(pantalla.grupoSeleccionado);
                txtCodigo.Focus();
            }
        }

        private void txtGrupoID_Enter(object sender, EventArgs e)
        {
            txtGrupoID.SelectAll();
        }

        private void txtCodigo_Enter(object sender, EventArgs e)
        {
            txtCodigo.SelectAll();
        }

        private void txtNombre_Enter(object sender, EventArgs e)
        {
            txtNombre.SelectAll();
        }

        private void txtCosto_Enter(object sender, EventArgs e)
        {
            txtCosto.SelectAll();
        }

        private void txtPrecio1_Enter(object sender, EventArgs e)
        {
            txtPrecio1.SelectAll();
        }

        private void txtPrecio2_Enter(object sender, EventArgs e)
        {
            txtPrecio2.SelectAll();
        }

        private void txtGrupoID_Leave(object sender, EventArgs e)
        {
            Grupo tGrupo = new Grupo(txtGrupoID.Text);
            configurarValoresGrupo(tGrupo);
        }

        private void ddlUnidadCompra_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                mProducto.UnidadCompra = ddlUnidadCompra.SelectedItem.ToString();
            }
            catch (NullReferenceException)
            {
            }
        }

        private void ddlUnidadManejo_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                mProducto.UnidadManejo = ddlUnidadManejo.SelectedItem.ToString();
            }
            catch (NullReferenceException)
            {
            }
        }

        private void ddlFormato_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                mProducto.FormatoID = ddlFormato.SelectedItem.ToString();
                if (mProducto.ComportamientoGrupal == "S")
                {
                    txtNombre.Text = lblDescripcionGrupo.Text + " " + mProducto.FormatoID;
                    mProducto.Nombre = txtNombre.Text;
                }
            }
            catch (NullReferenceException)
            { 
                txtNombre.Text = "";
            }
        }

        private void ddlEstado_ValueChanged(object sender, EventArgs e)
        {
            try
            {
                mProducto.Estado = ddlEstado.SelectedItem.ToString();
            }
            catch (NullReferenceException)
            {
            }
        }

        private void cmdDatoPrueba_Click(object sender, EventArgs e)
        {
            mProducto.crearDatosPrueba();
        }
    }


    public static class utilidadesPresentacion
    {
        public static bool verificarContenido(UltraTextEditor pTextos, ErrorProvider pError)
        {
            if (pTextos.Text.Length == 0)
            {
                pError.SetError(pTextos, "Debe digitar un valor que no sea en blanco");
                return false;
            }
            else
            {
                pError.SetError(pTextos, "");
                return true;
            }
        }

        public static bool verificarContenido(UltraNumericEditor pTextos, ErrorProvider pError)
        {
            if (pTextos.Value.ToString() == "")
            {
                pError.SetError(pTextos, "Debe digitar un valor que no sea en blanco");
                return false;
            }
            else
            {
                pError.SetError(pTextos, "");
                return true;
            }
        }


        public static bool verificarContenido(UltraComboEditor pDdlist, ErrorProvider pError)
        {
            if (pDdlist.Text == "")
            {
                pError.SetError(pDdlist, "Debe digitar un valor que no sea en blanco");
                return false;
            }
            else
            {
                pError.SetError(pDdlist, "");
                return true;
            }
        }

        public static bool verificarContenido(UltraMaskedEdit pTextos, ErrorProvider pError)
        {
            if (pTextos.Text == "")
            {
                pError.SetError(pTextos, "Debe digitar un valor que no sea en blanco");
                return false;
            }
            else
            {
                pError.SetError(pTextos, "");
                return true;
            }
        }

        public static bool verificarContenido(Label pTextos, ErrorProvider pError)
        {
            if (pTextos.Text == "")
            {
                pError.SetError(pTextos, "Debe digitar un valor que no sea en blanco");
                return false;
            }
            else
            {
                pError.SetError(pTextos, "");
                return true;
            }
        }

    }

}